package com.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
 * 1. 接收端
 */
public class UDPReceiveA {

    public static void main(String[] args) throws IOException {
        // 1. 创建一个 DatagramSocket 对象，准备在 9999 端口上接收数据
        DatagramSocket socket = new DatagramSocket(9999);

        // 2. 构建一个 DatagramPackage 用来接受数据
       // 在udp中，一个数据包最大是 64k,不适合传输大数据
        byte[] buf = new byte[64 * 1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);

        // 准备接受数据,然后将数据放入到 DatagramPacket 中
        socket.receive(packet); // 如果没有数据包发送过来，那么会阻塞到这里

        // 3. 拆包，就是从 DatagramPacket 中取出数据
        int length = packet.getLength();//实际读取到的数据字节长度
        byte[] data = packet.getData();
        System.out.println(new String(data,0,length));


        // 4. 回复数据给B端
        // 4.1 将需要发送的数据，封装到 DatagramPackage中
        byte[] bytes = "好的".getBytes();
         packet = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.31.192"), 9998);
        // 4.2 发送数据
        socket.send(packet);


        // 4. 关闭流
        socket.close();
        System.out.println("A端退出");
    }
}
